/**
 * 
 */
package mx.com.asteca.persistencia.dao.impl;

import java.util.List;
import java.util.Set;

import mx.com.asteca.persistencia.PersistenciaException;
import mx.com.asteca.persistencia.dao.EstudioDAO;
import mx.com.asteca.persistencia.entidades.Alumnos;
import mx.com.asteca.persistencia.entidades.Estudios;
import mx.com.asteca.persistencia.entidades.EstudiosAlumno;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

/**
 * @author JAMARO
 *
 */
@Repository
public class EstudiosDAOImpl extends BaseDAOImpl<Estudios, Integer> implements EstudioDAO {

	@Override
	public Integer saveEstudioPorAlumno(Estudios estudio, Alumnos alumno) throws PersistenciaException{
		try{
			EstudiosAlumno estudiosAlumno = new EstudiosAlumno();
				estudiosAlumno.setEstudios(estudio);
				estudiosAlumno.setAlumnos(alumno);
				Integer i = (Integer) getSessionFactory().getCurrentSession().save(estudiosAlumno);
				return i;
		} catch (Exception ex) {
			throw new PersistenciaException(
					"Error salvando saveEstudioPorAlumno por alumno:" + ex.getMessage(),
					ex);
		}
	}
	
	@Override
	public List<Estudios> findEstudiosPorAlumno(int idAlumno) throws PersistenciaException{
		try{
			Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Estudios.class);
			criteria.createCriteria("estudiosAlumnos").add(Restrictions.eq("alumnos.idAlumno", idAlumno));
			List<Estudios> list = criteria.list();
			return list;
		}catch (Exception ex) {
			throw new PersistenciaException(
					"Error salvando findEstudiosPorAlumno por alumno:" + ex.getMessage(),
					ex);
		}
	}
	
	@Override
	public void borraEstudioPorAlumno(int idEstudio) throws PersistenciaException{
		try{
			Estudios estudios = findByPK(idEstudio);
			Set<EstudiosAlumno> set = estudios.getEstudiosAlumnos();
			for(EstudiosAlumno ea : set){
				getSessionFactory().getCurrentSession().delete(ea);
			}
			getSessionFactory().getCurrentSession().delete(estudios);
		}catch (Exception ex) {
			throw new PersistenciaException(
					"Error salvando borraEstudioPorAlumno por alumno:" + ex.getMessage(),
					ex);
		}
	}
	
}
